﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using JudoTec.cls;


namespace JudoTec.forms
{
    public partial class Listado_Competiciones : Form
    {
        protected List<object> listaCompeticiones;
        protected int fila;
        protected int col;
        Button botonPulsado;


        public Listado_Competiciones()
        {
            InitializeComponent();
            fila=0;
            col=0;
            listaCompeticiones = new List<object>();
            this.listaCompeticiones = DevolverCompeticionesActivas();
            // OCmprobamos si hay alguna competicion, en caso contrario informamos de ello
            if (listaCompeticiones.Count == 0)
            {
                lb_mensaje1.Visible = true;
                lb_mensaje2.Visible = true;
            }
            else
            {
                lb_mensaje1.Visible = false;
                lb_mensaje2.Visible = false;
                CargarCompeticiones();
            }
        }

        //Metodo que Aumenta las filas y las columnas
        protected void AumentarFilaCol()
        {
            if (col < 2)
                col++;
            else
            {
                col = 0;
                fila++;
            }
        }

        //Metodo que da formato a la tabla
        private void darFormatoTabla()
        {
            tableLayoutPanel1.RowStyles.Clear();
            for (int i = 0; i != fila; ++i)
            {
                RowStyle rs = new RowStyle();
                rs.Height = 20; // 20 píxeles
                tableLayoutPanel1.RowStyles.Add(rs);
            }
        }

        //Metodo que me crea los botones que referencian a las diferentes competiciones activas
        protected Button CrearBoton(string nombre, Image img, int id)
        {
            Button btn = new Button();
            btn.Width = 130;
            btn.Height = 65;
            //Cargo la imagen y el Label
            btn.Text = nombre;
            //Asignamos la propiedad Name del boton con el id de la competición
            btn.Name = Convert.ToString(id);
            //Le asignamos en evento onClick
            btn.Click += new EventHandler(Competicion_Click);

            return btn;
        }

        //Metodo que me crea los checkbox que referencian a las diferentes competiciones activas
        protected CheckBox CrearCheckBox(bool valor)
        {
            CheckBox checkbox = new CheckBox();
            checkbox.Enabled = false;
            if (valor)
                checkbox.Checked = true;
            else
                checkbox.Checked= false;

            return checkbox;
        }

        /// <summary>
        /// Evento que que se lanza cuando hacemos click sobre 
        /// un boton de los que hemos creado en tiempo de ejecucion
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Competicion_Click(object sender, EventArgs e)
        {
            //Guardo el boton pulsado                                   AUN NO SE PQ PERO LO HAGO....
            botonPulsado = (Button)sender;
            
            //Obtengo el objeto competicion de la lista de que cojo el id_competicion que esta en el name del boton
            // que invoca el evento, luego creo un objeto vacio y le cargo ese id_competicion para a si
            // poder hacer una busqueda con el metodo buscar  competicion el cual busca otro objeto en la lista con el mismo id_competicion
            // por ultimo guardo el objeto correspondien al index hallado....
            int numCompeticion = Convert.ToInt32(((Button)sender).Name);
            Competicion competicionAux = new Competicion();
            competicionAux.ID_Competicion = numCompeticion;
            int index = BuscarCompeticion(competicionAux);
            object objeto = listaCompeticiones[index];

            Form1 ventanaPrincipal = this.Owner as Form1;
            ventanaPrincipal.CargarCompeticion((Competicion)objeto);
            this.Close();
           
        }

        //Metodo que dado un objeto busca dentro de la lista y devuelve el indice dentro de esta
        private int BuscarCompeticion(object nuevoCompeticion)
        {
            int index;
            index = listaCompeticiones.FindIndex(delegate(object u)
            {
                return nuevoCompeticion.Equals(u);
            }
            );
            return index;
        }

        //Metodo que me devuelve en una lista de objetos tipo competicion todos las competiciones activas de la BD
        public static List<object> DevolverCompeticionesActivas()
        {
            List<object> listaCompeticiones = new List<object>();

            // Conexion y consulta ala BD
            MySqlConnection conexion = cls.ConexionMySQL.IniciarConexion();
            MySqlCommand comando = new MySqlCommand("SELECT * FROM competiciones WHERE activo=1", conexion);
            System.Data.DataSet datos = new DataSet();
            MySqlDataAdapter adaptador = new MySqlDataAdapter();
            adaptador.SelectCommand = comando;
            adaptador.Fill(datos, "misCompeticiones");

            //Recorro el dataSet para rellenar listaCompeticiones
            foreach (DataRow fila in datos.Tables["misCompeticiones"].Rows)
            {
                Competicion nuevaCompeticion = new Competicion();

                nuevaCompeticion.ID_Competicion = Convert.ToInt32(fila.ItemArray[0]);
                nuevaCompeticion.Nombre = fila.ItemArray[1].ToString();
                nuevaCompeticion.Edad_Min = Convert.ToInt32(fila.ItemArray[2]);
                nuevaCompeticion.Edad_Max = Convert.ToInt32(fila.ItemArray[3]);
                nuevaCompeticion.Peso_Min = Convert.ToDouble(fila.ItemArray[4]);
                nuevaCompeticion.Peso_Max = Convert.ToDouble(fila.ItemArray[5]);
                nuevaCompeticion.Sexo = Convert.ToString(fila.ItemArray[6]);
                nuevaCompeticion.Activo = Convert.ToBoolean(fila.ItemArray[7]);
                nuevaCompeticion.Participantes_Completos = Convert.ToBoolean(fila.ItemArray[8]);
                nuevaCompeticion.Combates_Completos = Convert.ToBoolean(fila.ItemArray[9]);

                listaCompeticiones.Add(nuevaCompeticion);
            }
            return listaCompeticiones;
        }


        // Metodo encargado de rellenar la tabla con los botones de las competiciones 
        protected virtual void CargarCompeticiones()
        {
            fila = 0;
            col = 0;
            tableLayoutPanel1.RowStyles.Clear();
            foreach (Competicion miCompeticion in listaCompeticiones)
            {
                Button boton;
                boton = CrearBoton(miCompeticion.Nombre, null, miCompeticion.ID_Competicion);
                tableLayoutPanel1.Controls.Add(boton, col, fila);

                AumentarFilaCol();
            }

            darFormatoTabla();
        }

        private void Listado_Competiciones_Load(object sender, EventArgs e)
        {

        }

        private void Listado_Competiciones_Load_1(object sender, EventArgs e)
        {

        }

        private void tableLayoutPanel1_Paint(object sender, PaintEventArgs e)
        {

        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void label2_Click(object sender, EventArgs e)
        {

        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {

        }
    }
}
